/*
包含n个接口请求函数的模块
每个函数返回promise
*/

import ajax from './ajax'       //  ajax请求
import jsonp from 'jsonp'       //  文件转jsonp
import { message } from 'antd'

// const BASE = 'http://localhost:5000'
const BASE = 'http://tgs.hubuer.xyz/'





// 登录
export const reqLogin = (username, password) => {
    return (
        ajax(BASE + 'api/v1/user/login', { username, password }, 'POST')
    )
}

// 获取天气信息
export const reqWeather = (city) => {
    return new Promise((resolve, reject) => {
        const url = `http://api.map.baidu.com/telematics/v3/weather?location=${city}&output=json&ak=3p49MVra6urFRGOT9s8UBWr2`
        // 发送jsonp请求
        jsonp(url, {}, (err, data) => {
            console.log('jsonp()请求返回的数据', err, data)
            // 如果成功了
            if (!err && data.status === 'success') {
                // 取出需要的数据
                const { dayPictureUrl, weather } = data.results[0].weather_data[0]
                resolve({ dayPictureUrl, weather })
            } else {
                // 如果失败了
                // message.error('获取天气信息失败!')
                console.log("失败的")
                const { dayPictureUrl, weather } = {
                    dayPictureUrl: 'http://api.map.baidu.com/images/weather/day/duoyun.png',
                    weather: '多云'
                }
                resolve({ dayPictureUrl, weather })
            }
        })
    })
}

// 获取一级或某个二级列表
export const reqCategorys = (parentId) => {
    return (
        ajax(BASE + '/manage/category/list', { parentId })
    )
}

// 添加分类
export const reqAddCategory = (categoryName, parentId) => {
    return (
        ajax(BASE + '/manage/category/add', { categoryName, parentId }, 'POST')
    )
}

// 更改品类名称
export const reqUpdateCategory = ({ categoryId, categoryName }) => {
    return (
        ajax(BASE + '/manage/category/update', {
            categoryId,
            categoryName
        }, 'POST')
    )
}

// 根据分类ID获取分类
export const reqCategory = (categoryId) => {
    return (
        ajax(BASE + '/manage/category/info', { categoryId })
    )
}

// 获取商品分页列表
export const reqProducts = (pageNum, pageSize) => {
    return (
        ajax(BASE + '/manage/product/list', { pageNum, pageSize })
    )
}

// 根据ID/Name搜索产品分页列表
export const reqSearchProducts = ({ pageNum, pageSize, searchName, searchType }) => {
    console.log("zheli", pageNum, pageSize, searchName, searchType)
    return (
        ajax(BASE + '/manage/product/search', {
            pageNum,
            pageSize,
            [searchType]: searchName
        })
    )
}

// 添加/更新商品
export const reqAddOrUpdateProduct = (product) => {
    return (
        ajax(BASE + '/manage/product/' + (product._id ? 'update' : 'add'), product, 'POST')
    )
}

// 对商品进行上架/下架处理
export const reqUpdateProductStatus = (productId, status) => {
    return (
        ajax(BASE + '/manage/product/updateStatus', {
            productId,
            status
        }, 'POST')
    )
}

// 删除图片
export const reqDeleteImg = (name) => {
    return (
        ajax(BASE + '/manage/img/delete', { name }, 'post')
    )
}

// 获取所有用户的列表
export const reqUsers = () => {
    return (
        ajax(BASE + '/manage/user/list')
    )
}

// 删除指定用户
export const reqDeleteUser = (userId) => {
    return (
        ajax(BASE + '/manage/user/delete', { userId }, 'POST')
    )
}

// 添加/更新用户
export const reqAddOrUpdateUser = (user) => {
    return (
        ajax(BASE + '/manage/user/' + (user._id ? 'update' : 'add'), user, 'POST')
    )
}

// 获取所有角色的列表
export const reqRoles = () => {
    return (
        ajax(BASE + '/manage/role/list')
    )
}

// 添加角色
export const reqAddRole = (roleName) => {
    return (
        ajax(BASE + '/manage/role/add', { roleName }, 'POST')
    )
}

// 添加角色
export const reqUpdateRole = (role) => {
    return (
        ajax(BASE + '/manage/role/update', role, 'POST')
    )
}

//  jsonp解决ajax跨域的原理
//      1). jsonp只能解决GET类型的ajax请求跨域问题
//      2). jsonp请求不是ajax请求, 而是一般的get请求
//      3). 基本原理
//          浏览器端:
//              动态生成<script>来请求后台接口(src就是接口的url)
//              定义好用于接收响应数据的函数(fn), 并将函数名通过请求参数提交给后台(如: callback=fn)
//          服务器端:
//              接收到请求处理产生结果数据后, 返回一个函数调用的js代码, 并将结果数据作为实参传入函数调用
//          浏览器端:
//              收到响应自动执行函数调用的js代码, 也就执行了提前定义好的回调函数, 并得到了需要的结果数据